# -*- coding:utf-8 -*-
"""
@Author : 审心
@Time : 2023/3/22 15:47
字符串操作工具类
"""

import re


def is_contain_letter(value: str) -> bool:
    """
    判断字符串是否包含字母
    :param value: 值
    :return: true or false
    """
    return True if re.compile(r'[a-zA-Z]').search(value) else False


def remove_digits(text):
    """
    删除字符串中的数字
    :param text: 字符串
    :return: 新字符串
    """
    return re.sub(r'\d+', '', text)


def any_blank(*args):
    """
    判断一个或多个字符串是否为空白字符串

    Args:
        *args: 可变长度参数列表，用于接收一个或多个字符串，也可以传入一个包含字符串的列表或元组

    Returns:
        bool: 如果其中任意一个字符串是空白字符串，则返回 True，否则返回 False
    """
    # 将传入的参数转换成一个字符串列表
    strings = []
    for arg in args:
        if isinstance(arg, (list, tuple)):
            strings.extend(arg)
        else:
            strings.append(arg)

    # 遍历所有传入的字符串
    for string in strings:
        # 判断字符串是否为 None 或者是否去掉空格后等于空字符串
        if string is None or string.strip() == '':
            # 如果其中任意一个字符串是空白字符串，则返回 True
            return True
    # 如果所有字符串都不是空白字符串，则返回 False
    return False


def non_any_blank(*args):
    """
    判断一个或多个字符串是否存在非空白字符串

    Args:
        *args: 可变长度参数列表，用于接收一个或多个字符串，也可以传入一个包含字符串的列表或元组

    Returns:
        bool: 如果其中任意一个字符串不是空白字符串，则返回 True，否则返回 False
    """
    # 将传入的参数转换成一个字符串列表
    strings = []
    for arg in args:
        if isinstance(arg, (list, tuple)):
            strings.extend(arg)
        else:
            strings.append(arg)

    # 遍历所有传入的字符串
    for string in strings:
        # 判断字符串是否为 None 或者是否去掉空格后等于空字符串
        if string is not None and string.strip() != '':
            # 如果其中任意一个字符串不是空白字符串，则返回 True
            return True
    # 如果所有字符串都是空白字符串，则返回 False
    return False


def filter_substrings(str_list):
    """
    从字符串列表中删除包含其他字符串的元素

    Args:
        str_list: 包含多个字符串的列表

    Returns:
        删除包含其他字符串的字符串后的列表

    Examples:
        >>> filtered_list = filter_substrings(['炒菜', '菜锅', '炒菜锅'])
        >>> print(filtered_list)
        ['炒菜锅']
    """
    # 将所有字符串转换为集合
    set_list = [set(s) for s in str_list]

    # 逐个比较集合中的元素
    filtered_set_list = []
    for i in range(len(set_list)):
        is_subset = False
        for j in range(len(set_list)):
            if i != j and set_list[i].issubset(set_list[j]):
                is_subset = True
                break
        if not is_subset:
            filtered_set_list.append(set_list[i])

    # 将集合转换回字符串列表，保持原始顺序
    filtered_str_list = []
    for s in str_list:
        if set(s) in filtered_set_list:
            filtered_str_list.append(s)

    return filtered_str_list
